package com.unju.ventanas.usuario;

import javax.swing.ButtonGroup;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.border.BevelBorder;
import javax.swing.border.TitledBorder;

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.UIManager;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;

import com.unju.hibernate.entidades.Usuario;
import com.unju.hibernate.patronDAO.imp.UsuarioDAOImp;
import com.unju.utils.AllShowMessage;
import com.unju.utils.ConstantesGlobales;
import com.unju.ventanas.principal.JFrmPrincipal;

import javax.swing.SwingConstants;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JRadioButton;
import javax.swing.DefaultComboBoxModel;
import java.awt.Font;

public class JPGestionUsuario extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private JTextField txtBuscar;
	private JPanel jpCabecera;
	private JLabel lblCodUsuario;
	private JLabel lblNomUsuario;
	private JPanel pResultadoBusqueda;
	private JLabel lblApNom;
	private JLabel lblPerfil;
	private JScrollPane scrollPane;
	private JRadioButton rdbtnNombreYApellido;
	private JRadioButton rdbtnUsuario;
	private JRadioButton rdbtnPerfil;
	private JButton btnNewButton;
	JComboBox<String> cmbEstadoUsuario;
	JDialogNuevoUsuario nuevoUsuario;
	private JLabel label;
	String codSeg;
	private JButton btnActualizarTabl;
	public JPGestionUsuario(String codSeguridad) {
		codSeg=codSeguridad;
		crearPanelPrincipal();
		crearComponetes();
		crearEncabezadoBus();
		actualizarLista(new UsuarioDAOImp().getAll());
		if(codSeg.substring(6, 7).equals("1"))
			btnNewButton.setVisible(true);
		else
			btnNewButton.setVisible(false);
	}

	public void crearPanelPrincipal() {
		setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"),
				"", TitledBorder.LEADING, TitledBorder.BELOW_TOP, null, null));
		setSize(1024, 650);
		setMinimumSize(new Dimension(1024, 650));
		setMaximumSize(new Dimension(1024, 650));
		setPreferredSize(new Dimension(1024, 650));
		setLayout(null);
	}

	public void crearEncabezadoBus() {
		// Cabecera de lista
		jpCabecera = new JPanel();
		jpCabecera.setBounds(20, 165, 960, 31);
		add(jpCabecera);
		jpCabecera.setBackground(Color.LIGHT_GRAY);
		jpCabecera.setBorder(new BevelBorder(BevelBorder.RAISED, null, null,
				null, null));
		jpCabecera.setLayout(null);

		// Nombre de Columna de Cabecera
		lblCodUsuario = new JLabel("Codigo");
		lblCodUsuario.setHorizontalAlignment(SwingConstants.CENTER);
		lblCodUsuario.setBounds(10, 11, 100, 14);
		jpCabecera.add(lblCodUsuario);

		lblNomUsuario = new JLabel("Usuario");
		lblNomUsuario.setBounds(150, 11, 46, 14);
		jpCabecera.add(lblNomUsuario);

		lblApNom = new JLabel("Nombre y Apellido");
		lblApNom.setHorizontalAlignment(SwingConstants.CENTER);
		lblApNom.setBounds(290, 11, 150, 14);
		jpCabecera.add(lblApNom);

		lblPerfil = new JLabel("Perfil Asignado");
		lblPerfil.setHorizontalAlignment(SwingConstants.CENTER);
		lblPerfil.setBounds(540, 11, 100, 14);
		jpCabecera.add(lblPerfil);

		JLabel lblEstado = new JLabel("Estado");
		lblEstado.setHorizontalAlignment(SwingConstants.CENTER);
		lblEstado.setBounds(690, 11, 100, 14);
		jpCabecera.add(lblEstado);
		
		JPanel panel = new JPanel();
		panel.setBorder(new TitledBorder(null, "Buscar por", TitledBorder.LEFT, TitledBorder.TOP, null, null));
		panel.setBounds(150, 108, 483, 45);
		add(panel);
		panel.setLayout(null);
		
		rdbtnUsuario = new JRadioButton("Usuario");
		rdbtnUsuario.setBounds(71, 17, 80, 23);
		rdbtnUsuario.setVerticalAlignment(SwingConstants.BOTTOM);
		panel.add(rdbtnUsuario);			
		
		rdbtnPerfil = new JRadioButton("Perfil");
		rdbtnPerfil.setBounds(153, 17, 80, 23);
		rdbtnPerfil.setVerticalAlignment(SwingConstants.BOTTOM);
		panel.add(rdbtnPerfil);			
		
		rdbtnNombreYApellido = new JRadioButton("Nombre de Responsable");
		rdbtnNombreYApellido.setVerticalAlignment(SwingConstants.BOTTOM);
		rdbtnNombreYApellido.setBounds(235, 17, 160, 23);
		panel.add(rdbtnNombreYApellido);
		
		ButtonGroup op1= new ButtonGroup();
		op1.add(rdbtnUsuario);
		op1.add(rdbtnPerfil);
		op1.add(rdbtnNombreYApellido);
		// Cuadro de Texto para buscar
		txtBuscar = new JTextField();
		txtBuscar.setBounds(178, 77, 325, 20);
		add(txtBuscar);
		txtBuscar.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				if(txtBuscar.getText().isEmpty())
					actualizarLista(new UsuarioDAOImp().getAll());
				if(rdbtnUsuario.isSelected()&&!txtBuscar.getText().isEmpty())					
					actualizarLista(buscarNomUsu(txtBuscar.getText().toString()));
				if(rdbtnPerfil.isSelected()&&!txtBuscar.getText().isEmpty())
					actualizarLista(buscarPerfil(txtBuscar.getText().toString()));
				if(rdbtnNombreYApellido.isSelected()&&!txtBuscar.getText().isEmpty())
					actualizarLista(buscarNom(txtBuscar.getText()));
				
				if(cmbEstadoUsuario.getSelectedItem().equals("ACTIVO"))
					actualizarLista(buscarEstado(true));						
				if(cmbEstadoUsuario.getSelectedItem().equals("INACTIVO"))
					actualizarLista(buscarEstado(false));
			}
		});
		txtBuscar.setColumns(10);
		
		JLabel lblEstado_1 = new JLabel("Estado");
		lblEstado_1.setBounds(513, 80, 46, 14);
		add(lblEstado_1);
		
		cmbEstadoUsuario = new JComboBox<String>();		
		cmbEstadoUsuario.setModel(new DefaultComboBoxModel<String>(new String[] {"TODOS", "ACTIVO", "INACTIVO"}));
		cmbEstadoUsuario.setBounds(569, 77, 100, 20);
		add(cmbEstadoUsuario);
		
		label = new JLabel(ConstantesGlobales.TITULO_GESTION_USUARIO);
		label.setHorizontalAlignment(SwingConstants.CENTER);
		label.setFont(new Font("Tahoma", Font.BOLD, 20));
		label.setBounds(350, 11, 268, 40);
		add(label);
	}

	public void crearComponetes() {

		// Etiqueta "Buscar"
		JLabel lblBuscar = new JLabel("Buscar");
		lblBuscar.setBounds(122, 80, 46, 14);
		add(lblBuscar);
		// Crear boton de Accion
		btnNewButton = new JButton(ConstantesGlobales.BTN_NUEVO);
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				nuevoUsuario = new JDialogNuevoUsuario(JFrmPrincipal.getInstance());
				actualizarLista(new UsuarioDAOImp().getAll());
			}
		});
		btnNewButton.setBounds(784, 555, 95, 23);
		add(btnNewButton);
		
		
		btnActualizarTabl = new JButton(ConstantesGlobales.BTN_ACT_TABLA);
		btnActualizarTabl.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				actualizarLista(new UsuarioDAOImp().getAll());
			}
		});
		btnActualizarTabl.setBounds(665, 555, 95, 23);
		add(btnActualizarTabl);
	}

	public  void actualizarLista(List<Usuario> lista) {
		pResultadoBusqueda = null;
		scrollPane = null;
		// Crear un Scroll para la lista de Resultado
		scrollPane = new JScrollPane();
		scrollPane.setBorder(null);
		scrollPane
				.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane
				.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPane.setPreferredSize(new Dimension(20, 400));
		scrollPane.setAutoscrolls(true);
		scrollPane.setBounds(10, 200, 1000, 350);
		add(scrollPane);
		try {
			// Crea lista de resultado
			pResultadoBusqueda = new JPanel();
			pResultadoBusqueda.setMaximumSize(new Dimension(970, 100000));
			pResultadoBusqueda.setSize(970, 10000);
			pResultadoBusqueda.setPreferredSize(new Dimension(970, 10000));
			pResultadoBusqueda.setBorder(new TitledBorder(UIManager
					.getBorder("TitledBorder.border"), "Resultado",
					TitledBorder.LEFT, TitledBorder.TOP, null, new Color(0, 0, 0)));
			pResultadoBusqueda.setLayout(null);
			scrollPane.setViewportView(pResultadoBusqueda);
			int n = 20;			
			int cant=lista.size();			
			for (int i = 0; i < cant; i++) {
				Usuario usu = new Usuario();
				usu = lista.get(i);
				JPLineaUsuario fil = new JPLineaUsuario(usu,codSeg);
				fil.setBounds(10, n, 960, 31);
				pResultadoBusqueda.add(fil, i);
				n = n + 40;
			}
			pResultadoBusqueda.setPreferredSize(new Dimension(970, n + 10));									
		} catch (Exception e) {
			e.printStackTrace();
			AllShowMessage.showErrorMessage(ConstantesGlobales.MENSAJE_LISTA_ERROR+e);

		}
		pResultadoBusqueda.validate();//
		pResultadoBusqueda.updateUI();//validate() y updateUI()--> Actualiza la tabla
	}
	private List<Usuario> buscarEstado(boolean estado){
		List<Usuario> listEnc=new ArrayList<Usuario>();
		List<Usuario> lista= new UsuarioDAOImp().getAll();		
		for (int i = 0; i < lista.size()-1; i++) {
			Usuario u=lista.get(i);
			if(u.isEstado()==estado)
				listEnc.add(lista.get(i));
		}
		return listEnc;
	}
	private List<Usuario> buscarPerfil(String nomPerfil){
		List<Usuario> listEnc=new ArrayList<Usuario>();
		List<Usuario> lista= new UsuarioDAOImp().getAll();
		for (int i = 0; i < lista.size()-1; i++) {
			Usuario u=lista.get(i);
			if(u.getPerfil().getNombre().equalsIgnoreCase(nomPerfil))
				listEnc.add(lista.get(i));
		}
		return listEnc;
	}
	private List<Usuario> buscarNom(String nom){
		List<Usuario> listEnc=new ArrayList<Usuario>();
		List<Usuario> lista= new UsuarioDAOImp().getAll();
		for (int i = 0; i < lista.size()-1; i++) {
			Usuario u=lista.get(i);
			try {
				if(u.getResponsable().getNombre().equalsIgnoreCase(nom)&&u.getResponsable()!=null)
					listEnc.add(u);
			} catch (Exception e) {}
		}			
		return listEnc;
	}
	private List<Usuario> buscarNomUsu(String nomUsu){
		List<Usuario> listEnc=new ArrayList<Usuario>();
		List<Usuario> lista= new UsuarioDAOImp().getAll();
		for (int i = 0; i < lista.size()-1; i++) {
			Usuario u=lista.get(i);
			if(u.getNombreUsuario().equalsIgnoreCase(nomUsu))
				listEnc.add(lista.get(i));
		}
		return listEnc;
	}
}
